perm filename PTY.JMG[UP,DOC]3 blob sn#105891 filedate 1974-06-09 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		HOW TO FEED AND CARE FOR PTY
C00005 00003		THE FIRST LINE OF THE FILE MUST BE A LOGIN
C00008 00004		HERE ARE SOME EXAMPLES OF (SYNONYMOUS) SEQUENCE-LISTS
C00009 00005		PTY WILL RECOGNIZE THESE SPECIAL CHARACTERS
C00012 00006		MORE SPECIAL CHARACTERS WHICH PTY WILL (HOPEFULLY) RECOGNIZE
C00015 00007		WHEN YOU R PTY IT WANTS TO KNOW A FEW THINGS
C00017 00008		HERE IS A SIMPLE EXAMPLE:
C00018 ENDMK
C⊗;
	HOW TO FEED AND CARE FOR PTY


	PTY IS A GENERAL PURPOSE PSEUDO-TTY COMMAND
PROCESSOR. THE USER CREATES A FILE WHICH LISTS THE
SET OF COMMANDS THAT HE WOULD LIKE TO TYPE ON A TTY.
PTY SENDS THESE COMMANDS TO A PSEUDO-TTY. THE USER
CAN SEE THE TYPEOUT ON HIS TTY AND/OR HAVE IT STORED
IN AN OUTPUT FILE FROM PTY.

	PTY IS MOST USEFUL TO SETUP A PRODUCTION RUN
WHICH LOOPS THROUGH A SET OF COMMANDS SEVERAL TIMES, 
CHANGING A FEW PARAMETERS FOR EACH PASS. THE USER CAN
SPECIFY SUCH A LOOP IN THE FILE HE GIVES TO PTY.

	ALL LINES OF THE INPUT FILE MUST BEGIN WITH
ONE OF THE FOLLOWING "LINE-CHARACTERS":

"." 		  IF THE LINE IS A MONITOR COMMAND, AND PTY SHOULD WAIT
		    FOR MONITOR LEVEL (ACTIVELY CHECKING BITS AND CHARACTERS).
"*" 		  IF THE LINE IS A PROGRAM COMMAND, AND PTY SHOULD WAIT
		    FOR COMMAND LEVEL (ACTIVELY CHECKING BITS AND CHARACTERS).
"{"<STRING>"}"    IF <STRING> IS EXPECTED TO PRECEDE THIS LINE OF
		    INPUT (PTY WAITS FOR CHARACTERS AND CHECKS FOR <STRING>;
		    THIS IS MORE EFFICIENT THAN ABOVE TWO CHECKS, WHICH
		    USE MORE COMPUTER TIME FOR CONTINUAL CHECKING).
<TAB> or <SPACE>  IF THIS IS A CONTINUATION OF THE PREVIOUS LINE.
"LOOP"		  IF THIS IS AN INNER LOOP SPECIFICATION.
"∞"		  IF USER WANTS INTERACTIVE TTY LINE-MODE (UNTIL HE TYPES
		    A LINE CONSISTING ENTIRELY OF "∞", WHICH RETURNS TO
		    THE PTY SEQUENCE OF LINES).

	THE FIRST LINE OF THE FILE MUST BE A LOGIN
(MONITOR-LEVEL) COMMAND WITH THE USER'S PPN:

.L 1/PPN


	LOOPING THROUGH THE COMMAND FILE

	THERE ARE MANY WAYS TO INITIATE LOOPING THROUGH THE 
COMMAND FILE. ONE CAN SET THE VARIABLE "LOOPS" WHEN RUNNING
PTY (SEE BELOW); ONE CAN SPECIFY A LIST OF ITEMS TO BE FOUND 
IN SOME OTHER FILE, SETTING THE VARIABLE "FILE" WHEN RUNNING 
PTY (SEE BELOW); OR, FINALLY, ONE CAN EMBED A SEQUENCE-LIST IN 
ANY LINE OF THE COMMAND FILE.   THIS SEQUENCE-
LIST IS A SET OF SUB-STRINGS SUCH THAT THE NTH SUB-STRING WILL
BE CHOSEN IN THE NTH LOOP THROUGH THE FILE. THIS SUB-STRING
WILL BE DIRECTLY EMBEDDED IN THE CONTEXT THAT THE SEQUENCE-LIST
WAS PLACED. THE TOTAL NUMBER OF LOOPS THROUGH THE FILE CAN THUS
BE DETERMINED BY THE LONGEST SEQUENCE-LIST, AND ALL SHORTER
SEQUENCE-LISTS WILL WRAP AROUND RESPECTIVELY.

	THE FORMAT FOR A SEQUENCE-LIST FOLLOWS (NOTE THAT A SPECIAL
CHARACTER APPEARS IN QUOTES FOR THE PURPOSE OF STATING THE FORMAT ONLY.
THE QUOTES SHOULD NOT APPEAR IN THE ACTUAL FILE.

    "⊂"<STR1>"|"<STR2>"|"< ... >"|"<STR_N>"⊃"

NOTE THAT THE LIST IS BOUNDED BY "⊂" AND "⊃", AND THE SUB-
STRINGS ARE SEPARATED BY THE DELIMETER "|". IT IS PERMISSIBLE
TO SPECIFY THE CONSEQUETIVE REPETITION OF ANY STRING IN THE LIST
BY FOLLOWING THAT STRING WITH:  "@"_NUM , WHERE NUM IS THE NUMBER
OF REPETITIONS DESIRED. 
	HERE ARE SOME EXAMPLES OF (SYNONYMOUS) SEQUENCE-LISTS

*⊂FOO.1|FOO.2|FOO.3|FOO.3|FOO.3⊃
*⊂FOO.1|FOO.2|FOO.3@3⊃
*FOO.⊂1|2|3|3|3⊃
*FOO.⊂1|2|3@3⊃

	THE ABOVE COMMANDS WOULD SET PTY TO LOOP THROUGH THE WHOLE
FILE AT LEAST 5 TIMES. THE NTH SUCCESSIVE LOOP WOULD EMPLOY THE NTH 
STRINGS IN THE ABOVE LINES. AN EXAMPLE OF TWO SEQUENCE-LISTS OF 
UNEQUAL LENGTHS, AND A SYNONYMOUS LINEAR LIST FOLLOWS:

*⊂FOO@3|BAZ@3⊃.⊂1|2⊃
*⊂FOO.1|FOO.2|FOO.1|BAZ.2|BAZ.1|BAZ.2⊃
	PTY WILL RECOGNIZE THESE SPECIAL CHARACTERS

"↑"<CHR> 	CONTROL KEY, TO MONITOR (CHR←CHR-'100).
		    ("↑C" IS CALL).

"α"<CHR>  	CONTROL KEY AT USER LEVEL (CHR←CHR+'200).

"β"<CHR> 	META KEY AT USER LEVEL (CHR←CHR+'400).

"$"	 	ALTMODE.

"¬"	 	BACKSPACE.

"_"	 	LINE FEED.

"""<STR>"""	STR IS USED AS LITERAL, EXCEPTING "⊂|⊃", THE
		  SPECIAL CHARACTERS ARE NOT INTERPRETED.
		
"⊗"	 	IF THIS CHARACTER IS PLACED IN FRONT OF A COMMAND
		  THEN IT WILL ONLY BE FUNCTIONAL IN THE FIRST LOOP.
		
"\"	 	SUPPRESS THE <CR> AT THE END OF THE COMMAND.

"#"	 	SUBSTITUTE THE "LOOP NUMBER" FOR THIS CHR.

"∪"	 	INTERACTIVE PAUSE 
		(IS A COMPLETE COMMAND, FOLLOWING "LINE-CHAR"):
		    THE MESSAGE "TYPE <CR> TO CONTINUE" WILL
		    APPEAR ON TTY AND PTY WAITS FOR <CR>.

"∩"	 	INTERACTIVE TTY CHARACTER-MODE 
		(IS A COMPLETE COMMAND, FOLLOWING "LINE-CHAR"):
		    THE MESSAGE "TTY INPUT MODE. TO EXIT TYPE "∩" "
		    WILL APPEAR ON TTY AND PYT WILL ACCEPT INPUT
		    FROM TTY UNTIL IT SEES "∩" CHARACTER.
		    THIS LOSES OCCASIONALLY, BETTER TO USE THE "∞"
		    INTERACTIVE TTY LINE-MODE (SEE BELOW).

"∞"	 	INTERACTIVE TTY LINE-MODE 
		(IS A COMPLETE COMMAND, NO "LINE-CHAR"):
		    THE MESSAGE "TTY INPUT MODE. TO EXIT TYPE "∩" "
		    WILL APPEAR ON TTY AND PYT WILL ACCEPT INPUT
		    FROM TTY UNTIL IT SEES "∩" CHARACTER.
		    THIS LOSES OCCASIONALLY, BETTER TO USE THE "∞"
		    INTERACTIVE TTY LINE-MODE (SEE BELOW).
	MORE SPECIAL CHARACTERS WHICH PTY WILL (HOPEFULLY) RECOGNIZE
<COMMAND-LINE>"↓"<NUM>"↓"	
		SKIP NUM-1 LINES FOR NEXT INSTRUCTION

<COMMAND-LINE>"∧"<NUM>		
		LOCAL SLEEP SWITCH IS SET TO NUM SECONDS. THIS MUST
		    APPEAR AT VERY END OF A LINE AND SETS THE LAG UNTIL
		    THE NEXT LINE IS PROCESSED. PERTAINS ONLY TO THE
		    ACTIVE-TYPE PTY "LINE-CHAR" FOR THE NEXT LINE,
		    RE HOW LONG BETWEEN BIT-CHECKS (SEE FIRST PAGE).

<COMMAND-LINE>"{"<STR1>"}"<STR2>"↓"<NUM>"↓"	  	
		EVALUATE THE INCOMING STRINGS AFTER THE COMMAND IS SENT
		    OUT AND TEST FOR THE (SUB)STRING STR1. IF IT OCCURS:
		    1. SEND OUT THE STRING STR2.
		    2. SKIP NUM-1 LINES IN THE COMMAND FILE (OPTIONAL).

"LOOP"<NUM1>"FOR"<NUM2>   INNER LOOP
		(IS A COMPLETE LINE, WITH NO "LINE-CHAR").
		THE NEXT NUM1 LINES IS TREATED AS AN INNER LOOP TO THE MAIN
		    LOOP (THROUGH THE ENTIRE FILE). IT WILL BE READ THROUGH
		    NUM2 TIMES BEFORE CONTINUING IN THE MAIN BODY. NOTE THAT
		    NUM1 OR NUM2 (THE LATTER MAY BE USEFUL) CAN BE SET UP 
		    AS A SEQUENCE-LIST AS WELL AS A CONSTANT. AS USUAL, THE
		    SEQUENCE-LIST IS INDEXED WITH RESPECT TO THE MAIN LOOP.
		    THE SPECIAL CHARACTERS "∀" AND "∃" MAY BE USED AS COUNTERS
		    IN THE INNER LOOP, AS "#" IS USED IN THE MAIN LOOP. THEY
		    WILL RESET TO 1 AT THE INITIALIZATION OF EACH INNER LOOP.

"↔"		PTY WILL ASK FOR A STRING (OR GET ONE FROM A SECOND FILE, IF THE
		    VARIABLE "FILE" IS SET-SEE BELOW), WHICH WILL BE SUBSTITUTED 
		    FOR THE ARROW IN THE COMMAND FILE, EACH LOOP THROUGH.

"→"		PTY WILL SUBSTITUTE THE ABOVE STRING FOR THE REST OF THIS
		    PARTICULAR LOOP, FOR THIS ARROW.

"SEND"<SPACE><PPN><SPACE><STRING>	MESSAGE STRING UPON EXIT.
		(IS A COMPLETE LINE, NO "LINE-CHAR").
		    PTY WILL SEND <STRING> TO <PPN> UPON EXITING.
		    THIS SHOULD BE THE LAST LINE IN A COMMAND FILE.
	WHEN YOU R PTY IT WANTS TO KNOW A FEW THINGS

"INPUT : "  -	(COMMAND "FILE.EXT") (OR SEE BELOW)
		(EXT="PTY" IS DEFAULT AND NEED NOT BE STATED)

"OUTPUT : " -	("TTY:" AND/OR OUTPUT "FILE.EXT", E.G.:
		1.	 "TTY:"	 	
		2.	 "OUTPUT.LST"
		3.	 "TTY:OUTPUT.LST"
		4.	 NULL (=NO RECORD AT ALL)

	YOU MAY SET ANY OF THE FOLLOWING VARIABLES:

"OFFSET"     - THE OFFSET OF THE NUMBER WHICH "#" WILL CAUSE
		  TO BE PRINTED VS. THE REAL LOOP NUMBER (DEFAULT=0).
"START"	     - THE FIRST ACTUAL LOOP TO BE PROCESSED  (DEFAULT=1).
"INPUT"	     - INPUT SETUP PARAMETERS FROM TTY.
"FILE"	     - ANOTHER FILE, WHICH HAS A LIST OF STRINGS FOR "↔"
		  TYPE OF INPUT.  PARSE THESE ITEMS BY "," OR " ".
"LOOPS"      - THE NUMBER OF LOOPS THRU THE COMMAND FILE, IF
		  NOT OTHERWISE SPECIFIED.
"SLEEP"	     - THE NUMBER OF SECONDS THE PTY WILL WAIT BEFORE PROCESSING
		  THE NEXT COMMAND. (NOTE THAT PTY CAN TAKE AS MUCH
		  COMPUTER TIME AS THE JOBS IT RUNS IF SLEEP=0)
"DEBUG"	     - TYPE OUT THE MAGIC BITS (INTERESTED????).

TYPE <CR> TO  "INPUT : "    AND "*" WILL BE PRINTED.
    THEN SET VARIABLE "VAR" TO SOME VALUE AS FOLLOWS:

*VAR←VALUE;
*<CR> WILL RETURN YOU TO "INPUT : "

	HERE IS A SIMPLE EXAMPLE:

.L 1/PPN	
.⊗A DTA1:
.ED BAZ.SAI
{*}S#$⊂2|3|4⊃$100
{*}D200:*
{*}I200
{*}COMMENT THIS IS VERSION NUMBER # OF BAZ.SAI
	AND THIS IS A COMMENT ON LINE 200;
{*}$\
{*}E
.TYPE BAZ
.∪
.R SAIL
*BAZ#.REL←BAZ.SAI∧10
*↑C
.R LOADER
*BAZ#$∧10
.SAV BAZ⊂1|2|3⊃
.COP DTA1:←BAZ#.DMP